#include "HP.h"

void test()
{
    HP a ;
    HP_init(&a);
    int arr[] = {68,34,68,99,34,67};
    int len_arr = sizeof(arr)/sizeof(*arr);
    for(int i = 0;i<len_arr;i++)
    {
        HP_push(&a,arr[i]);
    }
    headpop(&a);
    while(a.size>0)
    {
        printf("%d  ",heaptop(&a));
        headpop(&a);
    }
    return ;
}


//堆排序
void heapsort(int *arr,int len)
{
    // for(int i=0;i<len;i++)
    // {
    //     adjust_up(arr,i,-1,i+1);
    // }
    // for(int j = 0;j<len-1;j)
    // {
    //     swap(arr,arr+len-1-j++,sizeof(int));
    //     adjust_down(arr,0,-1,len-j);
    // }//向上建堆
    for(int i =(len-2)/2;i>=0;i--)
    {
        adjust_down(&arr[i],0,1,len-i);
    }
    for(int i = 0;i<len-1;i)
    {
        swap(arr,arr+len-1-i++,sizeof(int));
        adjust_down(arr,0,1,len-i);
    }
    int b = 0;
    return;
}

int*  top_k(int k)
{
    const char * file = "test.txt";
    FILE* pf = fopen64(file,"r");
    if(!pf)
    {
        perror("open fail\n");
    }
    int* arr= (int*)malloc(sizeof(int)*k);
    int t = 0;
    for(size_t i= 0;i<10 && fscanf(pf,"%d",&t);i++)
    {
        arr[i] = t;
    }
    for(size_t i = (k-2)/2;i<k;i++)
    {
        adjust_down(&arr[i],0,-1,k-i);
    }
    while (feof(pf))
    {
        fscanf(pf,"%d",&t);
        if(t>arr[0])
        {
            arr[0] = t;
            adjust_down(arr,0,-1,k);
        }
    }
    return arr;
}

int main()
{
    int arr[] = {3,2,6,2,8,9,4};
    heapsort(arr,sizeof(arr)/sizeof(*arr));

    // srand((unsigned int)time(0));
    // const char * file = "test.txt";
    // FILE* pf = fopen64(file,"w");
    // for(size_t i= 0;i<100000;i++)
    // {
    //     fprintf(pf,"%d\n",rand()%100000);
    // }
    // fclose(pf);
    // int *arr = top_k(10);
    // for(int i = 0;i<10;i++)
    // {
    //     printf("%d\n",arr[i]);
    // }
    // free(arr);
    return 0;
}

